EMRのAMI Verison3系でAWS-CLIを利用する際はBootstrap Actionの指定が必要
AMI Version3.1.4, 3.2.1以降でこの問題は修正されているようです。
EMR上でAWS-CLIを利用しようとしたら以下のエラーに遭遇しました。
$ aws --region ap-northeast-1 ec2 describe-vpcs [Errno 185090050] _ssl.c:330: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
調べてみたところAMI 3.0.2 and SSL errorというページが見つかりました。どうもcacert.pemが見つからないようで、現状としてAMI Version3系ではAWS-CLIのアップグレードが必要とのことでした。
実際にフォーラムに書かれている以下のコマンドを実行すればAWS-CLIが動作するようになりました。
sudo pip uninstall -y awscli sudo rm -rf /usr/lib/python2.6/site-packages/awscli-*.egg /usr/lib/python2.6/site-packages/botocore-*.egg sudo yum -y reinstall aws-cli python-botocore
ですが、EMRの場合にクラスタの各EC2インスタンスにログインしてコマンドを実行するのは現実的ではありません。フォーラムでもBootstrap Actionを利用する手順が紹介されていました。
ということで、AWSサポート?が用意したエラー回避用のBootstrap Actionを利用する手順について紹介します。マネジメントコンソールでBootstrap Actionを追加するだけです。
手順は以下の通りです。クラスタを作成する際に以下の手順を追加して下さい。
- [Add bootstrap action]をクリックして[Custom action]を選択する
- [Configure and add]ボタンをクリックする
- 入力画面が開くので[S3 location]にs3://support.elasticmapreduce/bootstrap-actions/other/20140821installPipandUpdateAWSCLI.bashと入力する
- [Add]ボタンで確定する
実際に前述のBootstrap Actionを追加してクラスタを作成するとAWS-CLIが正常に動作しました。
$ aws --region ap-northeast-1 ec2 describe-vpcs { "Vpcs": [ { "VpcId": "vpc-XXXXXX", "InstanceTenancy": "default", "State": "available", "DhcpOptionsId": "dopt-XXXXXXXX", "CidrBlock": "172.31.0.0/16", "IsDefault": true } ] }
AWS側で現在対応中とのことですので、3.1.2には対応されているのではないでしょうか。それまではEMRでAWS-CLIを利用する際は前述のBootstrap Actionの指定をする必要がありそうです。